/**
 * 统一状态管理工具
 * 提供加载、错误、空状态的统一处理
 */

class StateManager {
  /**
   * 显示加载状态
   * @param {Object} options - 配置选项
   * @param {String} options.title - 加载提示文字，默认'加载中...'
   * @param {Boolean} options.mask - 是否显示透明蒙层，默认true
   */
  static showLoading(options = {}) {
    const { title = '加载中...', mask = true } = options;
    wx.showLoading({
      title,
      mask
    });
  }

  /**
   * 隐藏加载状态
   */
  static hideLoading() {
    wx.hideLoading();
  }

  /**
   * 显示成功提示
   * @param {String} title - 提示文字
   * @param {Number} duration - 显示时长（ms），默认2000
   */
  static showSuccess(title, duration = 2000) {
    wx.showToast({
      title,
      icon: 'success',
      duration
    });
  }

  /**
   * 显示错误提示
   * @param {String} title - 错误提示文字
   * @param {Number} duration - 显示时长（ms），默认2000
   */
  static showError(title, duration = 2000) {
    wx.showToast({
      title,
      icon: 'none',
      duration
    });
  }

  /**
   * 显示警告提示
   * @param {String} title - 警告提示文字
   * @param {Number} duration - 显示时长（ms），默认2000
   */
  static showWarning(title, duration = 2000) {
    wx.showToast({
      title,
      icon: 'none',
      duration,
      image: '/assets/warning-icon.png' // 可选：自定义图标
    });
  }

  /**
   * 显示确认对话框
   * @param {Object} options - 配置选项
   * @param {String} options.title - 对话框标题
   * @param {String} options.content - 对话框内容
   * @param {String} options.confirmText - 确认按钮文字，默认'确定'
   * @param {String} options.cancelText - 取消按钮文字，默认'取消'
   * @returns {Promise<Boolean>} 返回用户选择，true为确认，false为取消
   */
  static showConfirm(options = {}) {
    const {
      title = '提示',
      content = '',
      confirmText = '确定',
      cancelText = '取消'
    } = options;

    return new Promise((resolve) => {
      wx.showModal({
        title,
        content,
        confirmText,
        cancelText,
        success: (res) => {
          resolve(res.confirm);
        },
        fail: () => {
          resolve(false);
        }
      });
    });
  }

  /**
   * 显示操作菜单
   * @param {Array<String>} itemList - 菜单项列表
   * @returns {Promise<Number|undefined>} 返回选中项的索引，取消返回undefined
   */
  static showActionSheet(itemList = []) {
    return new Promise((resolve) => {
      wx.showActionSheet({
        itemList,
        success: (res) => {
          resolve(res.tapIndex);
        },
        fail: () => {
          resolve(undefined);
        }
      });
    });
  }
}

module.exports = StateManager;

